package com.hx.jdk8.util;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * Lambda表达式工具类
 *
 * @author MingHuaChen
 * @version 1.0
 * @date 2021-06-27 16:48:25
 */
public class LambdaUtil {


    /**
     * 转换
     *
     * @param list     入参
     * @param function 函数
     * @param <T>      泛型1
     * @param <R>      泛型2
     * @return 结果
     */
    public static <T, R> List<R> map(List<T> list, Function<T, R> function) {
        List<R> result = new ArrayList<>(list.size());
        for (T t : list) {
            result.add(function.apply(t));
        }
        return result;
    }


    /**
     * 过滤
     *
     * @param list      入参
     * @param predicate 表达式
     * @param <E>       泛型
     * @return 结果
     */
    public static <E> List<E> filter(List<E> list, Predicate<E> predicate) {
        List<E> result = new ArrayList<>();
        for (E e : list) {
            if (predicate.test(e)) {
                result.add(e);
            }
        }
        return result;
    }

}
